
#ifndef _BSP_TIMER_C
#define _BSP_TIMER_C

/********************************************************************************************
*file description:
*
*
*
*Created by Evan @2025/02/18
*Copyright (c) 2025,  Inc.
********************************************************************************************/
/********************************************************************************************
* include:
********************************************************************************************/
#include "BSP_Config.h"
#include "bsp_timer.h"

/********************************************************************************************
* Define:
********************************************************************************************/


/********************************************************************************************
* Datas:
********************************************************************************************/


/********************************************************************************************
* Function:
********************************************************************************************/
/********************************************************************************************
* Function Name  : bsp_timer_int_init
* Description    : 中断定时器初始化
* Input          : void
* Output         : void
* Return         : none
********************************************************************************************/
void bsp_timer_int_init(void)
{
    timer_parameter_struct timer_initpara;

    // clock
    rcu_periph_clock_enable(RCU_TIMER2);

    timer_deinit(TIMER2);

    /* TIMER configuration */
    timer_initpara.prescaler            = INT_TIMER_PSC - 1;
    timer_initpara.alignedmode          = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection     = TIMER_COUNTER_UP;
    timer_initpara.period               = INT_TIMER_PERIOD - 1;
    timer_initpara.clockdivision        = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter    = 0;
    timer_init(TIMER2, &timer_initpara);

    TIMER_CNT(TIMER2) = 0;

    timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);

    /* auto-reload preload enable */
    timer_auto_reload_shadow_enable(TIMER2);

    timer_interrupt_enable(TIMER2, TIMER_INT_UP);

    nvic_irq_enable(TIMER2_IRQn, ISR_PRIORITY_INT_TIMER);
    
    /* TIMER counter enable */
    timer_enable(TIMER2);
}

#endif
